package com.junjie.entity;

import java.util.ArrayList;
import java.util.List;

import com.junjie.dao.impl.BookDaoImpl;

/**
 * 购物车类，封装了对session
 * 的添加、删除、修改、列表、统计商品等的相关操作。
 * @author junjie
 *
 */
public class Cart {
	private List<CartItem> items = new ArrayList<CartItem>();
	

	/**
	 * 添加商品,如果之前没有添加则添加进去并返回一个true,表明,该商品已经成功添加过
	 */
	public boolean add(CartItem item){
		for (int i = 0; i < items.size(); i++) {
			CartItem curr = items.get(i);
			if(curr.getBook().getId()==item.getBook().getId()){
				return false;
			}
		}
		items.add(item);
		return true;
	}
	/**
	 * 返回已经购买的所有商品
	 */
	public List<CartItem> getItems() {
		return items;
	}
	public void setItems(List<CartItem> items) {
		this.items = items;
	}
	/**
	 * 删除商品
	 */
	public void delete(int id){
		for (int i = 0; i < items.size(); i++) {
			CartItem curr = items.get(i);
			if(curr.getBook().getId()==id){
				items.remove(i);
			}
		}
	}
	/**
	 * 修改商品的数量
	 * @param id
	 * @param qty
	 */
	public void modify(int id,int qty){
		for (int i = 0; i < items.size(); i++) {
			CartItem curr = items.get(i);
			if(curr.getBook().getId()==id){
				curr.setQty(qty);
			}
		}
	}
	/**
	 * 清空购买的所有商品
	 */
	public void clear(){
		items.clear();
	}
	/**
	 * 统计购买的商品的总的价格
	 * @return
	 */
	public double cost(){
		double sum = 0;
		for(int i=0;i<items.size();i++){
			CartItem item = items.get(i);
			sum += item.getQty() * item.getBook().getDangPrice();
		}
		return sum;
	}
	public double cost(String str){
		double sum = 0;
		for(int i=0;i<items.size();i++){
			CartItem item = items.get(i);
			sum += item.getQty() * item.getBook().getFixedPrice();
		}
		return sum;
	}
	/**
	 * 将items转换成一个形如
	 * 3,8;2,10;7,6这样的字符串。
	 * 其中，3表示id,8表示数量,依此类推。
	 * 如果返回0，则表示没有任何的商品。
	 * @return
	 */
	public String store(){
		StringBuffer sb = new StringBuffer();
		if(items.size() == 0){
			sb.append("0");
		}else{
			for(int i=0;i<items.size();i++){
				CartItem item = items.get(i);
				sb.append(item.getBook().getId()
						+"," + item.getQty() + ";");
			}
		}
		if(sb.length() > 1){
			sb.deleteCharAt(sb.length()-1);
		}
		return sb.toString();
	}
	
	/**
	 * 依据content的内容重新构造购物车。
	 * content就是形如3,8;2,10;7,6这样的字符串。
	 * @param content
	 */
	public void load(String content){
		
		if(content == null || content.equals("0")){
			//如果之前的购物车没有任何商品，则不需要恢复
			return;
		}
		String[] strs = content.split(";");
		for(int i=0;i<strs.length;i++){
			String str = strs[i];
			String[] str1 = str.split(",");
			int id = Integer.parseInt(str1[0]);
			int qty = Integer.parseInt(str1[1]);
			BookDaoImpl dao = new BookDaoImpl();
			try {
				Book book = dao.selectById(id);
				CartItem item = new CartItem();
				item.setBook(book);
				item.setQty(qty);
				items.add(item);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
}
